﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.IO;

public partial class ProcesoSeleccion_FrConsProcesosSeleccion : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

        //-------------------------Lineas Agregadas para la seguridad----------------------------------------------------

        if (Session["nomUsr"] != null || Session["nit"] != null)
        {
            if (Session["nit"] == null)
            {
                List<String> Permisos = (List<String>)Session["Permisos"];
                if (!Permisos.Contains(System.IO.Path.GetFileName(HttpContext.Current.Request.FilePath)))
                    Response.Redirect("/SUEWebSite/Error.aspx");
            }
            /// si el usuario logueado es empresa o usuario con rol practicante se habilitan o deshabilitan
            /// las opciones permitidas a este tipo de usaurio.
            if (Session["nit"] != null || Session["rolUsuario"].ToString() == "practicante")
            {
                PanelBusquedaAvanzada.Visible = false;
                LabelBusqueda.Visible = false;
                ButtonBavanzada.Visible = false;
                LinkButtonAgregarPracticante.Visible = false;
                LinkButtonAtras.Visible = false;
                LinkButtonVolver.Visible = false;
                LinkButtonAtras.Visible = false;
                if(Session["nit"] != null)
                    LinkButtonAtras.Visible = true;
            }
        }
        else
            Response.Redirect("../error.aspx");
        
        //-------------------------Lineas Agregadas para la seguridad----------------------------------------------------
  
        if (!Page.IsPostBack)
        {
            if (Session["rolUsuario"] != null)
            {
                // si es practicante se cargan sus procesos de selección
                if (Session["rolUsuario"].ToString() == "practicante")
                    BuscarTodos("", Session["nomUsr"].ToString());
            }
            // si es empresa se cargan sus proceos de selección obteniendo el idPractica de la URL
            if (Session["nit"] != null)
                BuscarPorPractica(Convert.ToInt32(Request.QueryString["idPractica"]));
            // se cargan los procesos de selección de una práctica obteniendo el idPractica de la URL
            else
            {
                PanelBusquedaAvanzada.Visible = false;
                BuscarPorPractica(Convert.ToInt32(Request.QueryString["idPractica"]));
            }
            
           
        }
       //verifica que el panel de busqueda no esta visible, para paginar cargando el datagrid con la busqueda especifica
        if (Session["nit"] != null)
            BuscarPorPractica(Convert.ToInt32(Request.QueryString["idPractica"]));
        PanelBusquedaVisible();
    }

    /// <summary>
    /// Verifica si se muestra o no el panel de búsqueda avanzada segun el rol de usaurio.
    /// y se cargan los datos según el rol del usuario, o buscando por los criterios de búsqueda 
    /// ingresados en TextBoxNombreEmpresa, TextBoxNombrePracticante
    /// </summary>

    private void PanelBusquedaVisible()
    {
        if (Request.QueryString["idPractica"] == null)
            LinkButtonAgregarPracticante.Visible = false; 
        if (Session["rolUsuario"] != null && Session["rolUsuario"].ToString() != "practicante" && Session["nit"] == null )
        {

            if (PanelBusquedaAvanzada.Visible == false)
                BuscarPorPractica(Convert.ToInt32(Request.QueryString["idPractica"]));
            else
            {
                BuscarTodos(TextBoxNombreEmpresa.Text, TextBoxNombrePracticante.Text);
                LinkButtonAgregarPracticante.Visible = false;
                LinkButtonVolver.Visible = true;
            }
        }
        else if (Session["rolUsuario"] != null && Session["rolUsuario"].ToString() == "practicante")
            BuscarTodos("", Session["nomUsr"].ToString());
        else if (Session["nit"] != null && Request.QueryString["idPractica"] != null && Request.QueryString["idPractica"].ToString() != "")
            BuscarPorPractica(Convert.ToInt32(Request.QueryString["idPractica"]));
    }

    /// <summary>
    /// Carga Toda la informacion referente a un proceso de selección dado el identificador de la practica 
    /// y especificando porque criterio buscar "Practica" o "Todos"
    /// Se crea un dataTable uniendo los datos de proceso de selección y la empresa para obtener el nombre de esta
    /// Se busca en la carpeta de cada proceso de selección individual los archvos existentes y se almacena el nombre
    /// del archivo en tambien en el DataTable.
    /// </summary>
    /// <param name="idPractica">(int) Identificador de la práctica para obtener los datos</param>
    /// <param name="busqueda">(string) Tipo Busqueda "Practica" o "Todos"</param>
    /// <returns></returns>

    private DataTable CargarProcesoSeleccion(int idPractica, string busqueda)
    {
        GestionarProcesosSeleccion procesos = new GestionarProcesosSeleccion();
        DataTable dt = procesos.BusquedaAvanazada(idPractica, busqueda);
        string archivo = "";
        string empresa = "";
        int cont = 0;

        DataTable dtMostrar = new DataTable();
        dtMostrar.Columns.Add("nombre", typeof(string));
        dtMostrar.Columns.Add("apellido", typeof(string));
        dtMostrar.Columns.Add("idTarea", typeof(string));
        dtMostrar.Columns.Add("Archivo", typeof(string));
        dtMostrar.Columns.Add("empresa", typeof(string));
        dtMostrar.Columns.Add("NombreUsuario", typeof(string));
        dtMostrar.Columns.Add("estadoHojaVida", typeof(string));
        dtMostrar.Columns.Add("estadoSeleccion", typeof(string));
        dtMostrar.Columns.Add("estadoAceptacion", typeof(string));
        dtMostrar.Columns.Add("idPractica", typeof(int));
        dtMostrar.Columns.Add("idProcesoSeleccion", typeof(int));

            

        foreach (DataRow dr in dt.Rows)
        {
            Empresa emp = new Empresa();
            empresa = emp.ConsEmpresaPorIdPractica(Convert.ToInt32(dt.Rows[cont]["Practica_idPractica"]));

            if (Directory.Exists(Server.MapPath("../Archivo/Tareas") + "\\" + dt.Rows[cont]["Practicante_Usuario_nombreUsuario"].ToString() + "\\" + dt.Rows[cont]["Tarea_idTarea"].ToString()))
            {
                string[] files = Directory.GetFiles(Server.MapPath("../Archivo/Tareas") + "\\" + dt.Rows[cont]["Practicante_Usuario_nombreUsuario"].ToString() + "\\" + dt.Rows[cont]["Tarea_idTarea"].ToString());
                if (files.Length > 0)
                {
                    foreach (string file in files)
                    {
                        FileInfo finfo = new FileInfo(file);
                        archivo = finfo.Name;
                    }
                }
            }
            
            if (Session["nit"] != null  && Session["nombreEmp"].ToString() != empresa)
                Response.Redirect("../error.aspx");
            dtMostrar.Rows.Add(dt.Rows[cont]["nombre"].ToString(), dt.Rows[cont]["apellido"].ToString(),
            dt.Rows[cont]["Tarea_idTarea"].ToString(), archivo, empresa, dt.Rows[cont]["Practicante_Usuario_nombreUsuario"].ToString(),
            dt.Rows[cont]["estadoHojaVida"].ToString(), dt.Rows[cont]["estadoSeleccion"].ToString(), dt.Rows[cont]["estadoAcepacion"].ToString(),
            Convert.ToInt32(dt.Rows[cont]["Practica_idPractica"]), dt.Rows[cont]["idProcesoSeleccion"].ToString());
            cont++;
            archivo = "";
        }
        return dtMostrar;
    }

    /// <summary>
    /// Busca todos los procesos de selección correspondientes a una práctica, dado el identificador de la práctica
    /// </summary>
    /// <param name="idPractica">(int) Identificador de la práctica</param>
    private void BuscarPorPractica(int idPractica)
    {
        GridView1.DataSource = CargarProcesoSeleccion(idPractica, "Practica");
        GridView1.DataBind();
        limpiar();
            
    }

    /// <summary>
    /// Busca todos los datos que cumplan con los criterios de búsqueda por nombre de empresa o por el
    /// nombre del practicante, la búsqueda se realiza en el dataTable que devuelve el metodo CargarProcesoSeleccion
    /// Se realiza un filtro de la información y se muestra en el Gridview1 
    /// </summary>
    /// <param name="NombreEmpresa"></param>
    /// <param name="nombrePracticante"></param>
    private void BuscarTodos(string NombreEmpresa, string nombrePracticante)
    {
        DataTable dt = CargarProcesoSeleccion(0, "Todos");
                
        DataRow[] dtrow;
        //string filtro = "idPractica =" + idPractica;
        
        //Linea Anterior: busca por el nombre del practicante y no por el nombre de usuario de este
        //string filtro = "empresa like '%"+ NombreEmpresa +"%' and nombre like '%" +nombrePracticante +"%'";
        //Se modifico el dia 17 Nov 2010. Ultimo dia de pruebas de aceptacion
        string filtro = "empresa like '%" + NombreEmpresa + "%' and NombreUsuario like '%" + nombrePracticante + "%'";
        DataTable dtFiltrado = new DataTable();
        dtFiltrado = dt.Clone();
        dtrow = dt.Select(filtro);
        foreach (DataRow dtr in dtrow)
        {
            dtFiltrado.ImportRow(dtr);
        }
        
        GridView1.DataSource = dtFiltrado;
        GridView1.DataBind();
        limpiar();
    }

    /// <summary>
    /// Hace invisibles los campos del Gridview1 de la columna Hoja de vida que esten vacios.
    /// Especificamene se hace invisible si el practicante no ha subido el archivo correspondiente
    /// a la tarea (hoja de vida) del proceso de selección.  Se realiza para evitar un link roto.
    /// 
    /// </summary>
    private void limpiar()
    {
        foreach (GridViewRow row in GridView1.Rows)
        {
            if (row.RowType == DataControlRowType.DataRow)
            {
                HyperLink hl = (HyperLink)row.Cells[4].Controls[0]; // 3 colimnada del gridview con el link de hoja de vida
                if (hl.Text != "")
                    hl.Visible = true;
                else
                    hl.Visible = false;
            }
        }
    }

    /// <summary>
    /// Al hacer clic se hace visible el panel de búsqueda avanzada y se quitan los links de agregar practicante
    /// se hace invisible el gridview.
    /// Si el parametro pasado por la URL es vacio se deshabilata el linkVolver (carga de nuevo los procesos buscando
    /// por el idPractica)
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void ButtonBavanzada_Click(object sender, EventArgs e)
    {
        if (Request.QueryString["idPractica"] == null)
                    LinkButtonVolver.Visible = false;
        PanelBusquedaAvanzada.Visible = true;
        GridView1.Visible = false;
        LinkButtonAgregarPracticante.Visible = false;
    }

    /// <summary>
    /// Al hacer clic se cargan los procesos de selección nuevamente dada la práctica especifica.
    /// Solo el link aparece si y solo si el paramatro del idPractica es diferente de NULL
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void LinkButtonVolver_Click(object sender, EventArgs e)
    {
        PanelBusquedaAvanzada.Visible = false;
        GridView1.Visible = true;
        BuscarPorPractica(Convert.ToInt32(Request.QueryString["idPractica"]));
        LinkButtonAgregarPracticante.Visible = true;
    }

    /// <summary>
    /// llama al metodo BuscarTodos, para buscar todos los procesos de selección que cumplan con los criterios 
    /// de busqueda escritos en TextBoxNombreEmpresa TextBoxNombrePracticante
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void ButtonBuscar_Click(object sender, EventArgs e)
    {
        if (Request.QueryString["idPractica"] == null)
            LinkButtonVolver.Visible = false;
        GridView1.Visible = true;
        BuscarTodos(TextBoxNombreEmpresa.Text, TextBoxNombrePracticante.Text);
    }

    /// <summary>
    /// Al cambiar de página en el control Gridview se cargan los siguientes resultados
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        GridView1.PageIndex = e.NewPageIndex;
        GridView1.DataBind();
        limpiar();
    }

    /// <summary>
    /// al hacer clic en el link se re direcciona al formulario de administración de procesos de selección
    /// pasando como parametro el identificador de la práctica
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void LinkButtonAgregarPracticante_Click(object sender, EventArgs e)
    {
        Response.Redirect("FrAdmProcesosSeleccion.aspx?idPractica="+Request.QueryString["idPractica"]);
    }
    /// <summary>
    /// al hacer clic en el link se re direcciona al formulario de Consultar Practicas
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>

    protected void LinkButtonAtras_Click(object sender, EventArgs e)
    {
        Response.Redirect("../GestionarPracticas/FrConsPracticas.aspx");
    }
}
